#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

//将节点中存储数据的类型进行重命名
typedef int SLNodeDataType;

//单链表节点
typedef struct SListNode
{
	SLNodeDataType data;
	struct SListNode* next;
}SLNode;


//单链表的打印
void SLPrint(SLNode* phead);

//尾插
void SLpushback(SLNode** pphead, SLNodeDataType x);

//头插
void SLpushfront(SLNode** pphead, SLNodeDataType x);

//尾删
void SLpopback(SLNode** pphead);

//头删
void SLpopfront(SLNode** pphead);

//查找
SLNode* SLTFind(SLNode* phead, SLNodeDataType x);

//在指定位置之前插入数据
void SLInsert(SLNode** pphead, SLNode* pos, SLNodeDataType x);

//在指定位置之后插入数据
void SLTnsertAfter(SLNode* pos, SLNodeDataType x);

//删除pos节点
void SLErase(SLNode** pphead, SLNode* pos);

//删除pos节点的后一个节点
void SLEraseAfter(SLNode* pos);

//销毁链表
void SListDesTroy(SLNode** pphead);